﻿using System.Collections.Specialized;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Web.UI;

namespace Accumulation.Controls.Paginations {
    internal class Helper {
        internal static string GetQueryStringPage(string clientId) {
            StringBuilder sb = new StringBuilder();
            MD5 helper = MD5.Create();
            byte[] bytes = helper.ComputeHash(Encoding.Default.GetBytes(clientId));
            foreach (byte b in bytes) {
                sb.Append(b.ToString("X2"));
            }
            return sb.ToString().Substring(0, 8);
        }
        internal static string GetQueryStringPageNum(string clientId) {
            return GetQueryStringPage(clientId + "show");
        }
        internal static string GetUrl(string queryString) {
            HttpRequest Request = HttpContext.Current.Request;

            string url = Request.Url.AbsolutePath;
            NameValueCollection querys = Request.QueryString;
            // 组合查询字符串，替换页码查询字符串
            string query = "?";
            foreach (string s in querys.AllKeys) {
                if (!s.Equals(queryString)) {
                    query += s + "=" + querys[s] + "&";
                }
            }
            return url + query + queryString + "={0}";
        }
        internal static string GetUrl(string queryString, string queryStringZL) {
            HttpRequest Request = HttpContext.Current.Request;

            string url = Request.Url.AbsolutePath;
            NameValueCollection querys = Request.QueryString;
            // 组合查询字符串，替换页码查询字符串与翻页查询字符串
            string query = "?";
            foreach (string s in querys.AllKeys) {
                if (!s.Equals(queryString) && !s.Equals(queryStringZL)) {
                    query += s + "=" + querys[s] + "&";
                }
            }
            return url + query + queryString + "={0}&" + queryStringZL + "={1}";
        }
        internal static int GetPageCount(int recordCount, int pageSize) {
            int pageCount = 1;
            if (pageSize == 0) return pageCount;
            pageCount = recordCount / pageSize;
            if (recordCount % pageSize > 0) {
                pageCount = pageCount + 1;
            }
            return pageCount;
        }
        internal static int GetPageNumCount(int pageCount, int pageNumSize) {
            if (pageNumSize == 0) { return 0; }
            int pageShowNumTotoal = pageCount / pageNumSize;
            if (pageCount % pageNumSize > 0) {
                pageShowNumTotoal++;
            }
            return pageShowNumTotoal;
        }
        internal static int GetCurrentPage(string queryString, int pageCount) {
            string page = HttpContext.Current.Request.QueryString[queryString];
            int currentPage = string.IsNullOrEmpty(page) ? 1 : int.Parse(page);
            currentPage = currentPage < 0 ? 1 : currentPage;
            return currentPage >= pageCount ? pageCount : currentPage;
        }
        internal static int GetCurrentPage(int currentPage, int pageCount) {
            currentPage = currentPage <= 0 ? 1 : currentPage;
            return currentPage >= pageCount ? pageCount : currentPage;
        }
        internal static string GetPostBack(int pageIndex, Page page, Control control) {
            return page.ClientScript.GetPostBackClientHyperlink(control, pageIndex.ToString());
        }
        internal static string GetPostBack(int pageIndex, int pageShowNumIndex, Page page, Control control) {
            return page.ClientScript.GetPostBackClientHyperlink(control,
                string.Format("{0}${1}", pageIndex.ToString(), pageShowNumIndex.ToString()));
        }
        internal static string GetWebResourceUrl(string urlName, Control control) {
            return control.Page.ClientScript.GetWebResourceUrl(control.GetType(), urlName);
        }

        #region 分页样式
        /// <summary>
        /// 分页样式 1
        /// </summary>
        /// <param name="pp">分页参数</param>
        internal static void OutputPageOne(PageParameters pp) {
            pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_bar");
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.Div);
            // 总记录数
            pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_total");
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
            pp.Writer.Write(pp.RecordCount.ToString());
            pp.Writer.RenderEndTag();
            // 当前页码/总页数
            pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_pages");
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
            pp.Writer.Write(pp.PageIndex + "/" + pp.PageCount);
            pp.Writer.RenderEndTag();
            // 第一页/上一页
            if (pp.PageIndex > 1) {
                if (pp.PageIndex > pp.PageIndexPreNum + 1 && pp.PageNumSize < pp.PageCount) {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_redirect");
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(1, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, 1));
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write("|&lsaquo;");
                    pp.Writer.RenderEndTag();
                }
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_redirect");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageIndex - 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageIndex - 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("&lsaquo;&lsaquo;");
                pp.Writer.RenderEndTag();
            }

            int minValue, maxValue;
            // 循环链接
            if (pp.PageNumSize > pp.PageCount) {
                minValue = 1;
                maxValue = pp.PageCount;
            }
            else {
                if (pp.PageIndex > pp.PageIndexPreNum) {
                    minValue = pp.PageIndex - pp.PageIndexPreNum;
                    maxValue = pp.PageNumSize + minValue - 1;
                }
                else {
                    minValue = 1;
                    maxValue = pp.PageNumSize;
                }
                if (maxValue > pp.PageCount) {
                    minValue = pp.PageCount - pp.PageNumSize + 1;
                    maxValue = pp.PageCount;
                }
            }

            for (int i = minValue; i <= maxValue; i++) {
                if (i == pp.PageIndex) {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_curpage");
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write(i.ToString());
                    pp.Writer.RenderEndTag();
                }
                else {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_num");
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(i, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, i));

                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write(i.ToString());
                    pp.Writer.RenderEndTag();
                }
            }
            // 下一页/最后一页
            if (pp.PageIndex < pp.PageCount) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_redirect");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageIndex + 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageIndex + 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("&rsaquo;&rsaquo;");
                pp.Writer.RenderEndTag();

                if (pp.PageIndex + pp.PageNumSize - pp.PageIndexPreNum <= pp.PageCount) {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_redirect");
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(pp.PageCount, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, pp.PageCount));
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write("&rsaquo;|");
                    pp.Writer.RenderEndTag();
                }
            }
            // textbox 跳转
            if (pp.PageCount > 1) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_pages");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Style, "padding:0px");
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "p_input");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Id, string.Format("{0}_PageIndex", pp.ControlObject.UniqueID));
                pp.Writer.AddAttribute("onkeydown", pp.LinkType == LinkTypeEnums.Postback
                    ? string.Format("return doPage('{0}',{1},null);", pp.ControlObject.UniqueID, 0)
                    : string.Format("return doPage('{0}',{1},'{2}');", pp.ControlObject.UniqueID, -1, pp.Url));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.Input);
                pp.Writer.RenderEndTag();
                pp.Writer.RenderEndTag();
            }

            pp.Writer.RenderEndTag();
        }
        /// <summary>
        /// 分页样式 2
        /// </summary>
        /// <param name="pp">分页参数</param>
        internal static void OutputPageTwo(PageParameters pp) {
            // 总记录数
            pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "pagebar");
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.Div);
            // 当前页码
            pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "pages");
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.Div);
            // 总页数
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.Em);
            pp.Writer.Write(string.Format("&nbsp;{0}&nbsp;", pp.RecordCount));
            pp.Writer.RenderEndTag();
            // 第一页/上一页
            if (pp.PageIndex > 1) {
                if (pp.PageIndex > pp.PageIndexPreNum + 1 && pp.PageNumSize < pp.PageCount) {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "first");
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(1, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, 1));
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write("1...");
                    pp.Writer.RenderEndTag();
                }
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "prev");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageIndex - 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageIndex - 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("&lsaquo;&lsaquo;");
                pp.Writer.RenderEndTag();
            }

            int minValue, maxValue;
            // 循环链接
            if (pp.PageNumSize > pp.PageCount) {
                minValue = 1;
                maxValue = pp.PageCount;
            }
            else {
                if (pp.PageIndex > pp.PageIndexPreNum) {
                    minValue = pp.PageIndex - pp.PageIndexPreNum;
                    maxValue = pp.PageNumSize + minValue - 1;
                }
                else {
                    minValue = 1;
                    maxValue = pp.PageNumSize;
                }
                if (maxValue > pp.PageCount) {
                    minValue = pp.PageCount - pp.PageNumSize + 1;
                    maxValue = pp.PageCount;
                }
            }

            for (int i = minValue; i <= maxValue; i++) {
                if (i == pp.PageIndex) {
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.Strong);
                    pp.Writer.Write(i.ToString());
                    pp.Writer.RenderEndTag();
                }
                else {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(i, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, i));

                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write(i.ToString());
                    pp.Writer.RenderEndTag();
                }
            }
            // 下一页/最后一页
            if (pp.PageIndex < pp.PageCount) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "next");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageIndex + 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageIndex + 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("&rsaquo;&rsaquo;");
                pp.Writer.RenderEndTag();
                if (pp.PageIndex + pp.PageNumSize - pp.PageIndexPreNum <= pp.PageCount) {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "last");
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(pp.PageCount, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, pp.PageCount));
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write(string.Format("...{0}", pp.PageCount));
                    pp.Writer.RenderEndTag();
                }
            }
            if (pp.PageCount > 1) {
                // textbox 跳转
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.Kbd);
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Size, "3");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Id, string.Format("{0}_PageIndex", pp.ControlObject.UniqueID));
                pp.Writer.AddAttribute("onkeydown", pp.LinkType == LinkTypeEnums.Postback
                    ? string.Format("return doPage('{0}',{1},null);", pp.ControlObject.UniqueID, 0)
                    : string.Format("return doPage('{0}',{1},'{2}');", pp.ControlObject.UniqueID, -1, pp.Url));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.Input);
                pp.Writer.RenderEndTag();
                pp.Writer.RenderEndTag();
            }

            pp.Writer.RenderEndTag();
            pp.Writer.RenderEndTag();
        }
        /// <summary>
        /// 分页样式 3
        /// </summary>
        /// <param name="pp">分页参数</param>
        internal static void OutputPageThree(PageParameters pp) {
            int pageIndex = (pp.PageNumIndex - 1) * pp.PageNumSize;
            // 总记录数/总页数/每页显示记录数/当前页码
            pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "zlpages");
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.Div);
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
            pp.Writer.Write(string.Format("共有{4}{0}{4}条记录{4}共{4}{1}{4}页{4}每页{4}{2}{4}条{4}当前第{4}{3}{4}页{4}",
                pp.RecordCount, pp.PageCount, pp.PageSize, pp.PageIndex, "&nbsp"));
            pp.Writer.RenderEndTag();
            // 上翻页
            if (pp.PageNumIndex > 1 && pp.PageNumIndex <= pp.PageNumCount) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(1, 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, 1, 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("|&lsaquo;");
                pp.Writer.RenderEndTag();
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pageIndex, pp.PageNumIndex - 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pageIndex, pp.PageNumIndex - 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("&lsaquo;&lsaquo;");
                pp.Writer.RenderEndTag();
            }
            // 输出页码
            if (pp.PageNumCount > 1) {
                for (int i = 1; i <= pp.PageNumSize; i++) {
                    if (pp.PageIndex == i + pageIndex) {
                        pp.Writer.RenderBeginTag(HtmlTextWriterTag.Strong);
                        pp.Writer.Write(pp.PageIndex.ToString());
                        pp.Writer.RenderEndTag();
                    }
                    else {
                        pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                            ? Helper.GetPostBack(i + pageIndex, pp.PageNumIndex, pp.PageObject, pp.ControlObject)
                            : string.Format(pp.Url, i + pageIndex, pp.PageNumIndex));
                        pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                        pp.Writer.Write((i + pageIndex));
                        pp.Writer.RenderEndTag();
                    }

                    if (i + pageIndex >= pp.PageCount) break;
                }
            }
            else {
                if (pp.PageCount > 1) {
                    for (int i = 1; i <= pp.PageCount; i++) {
                        if (pp.PageIndex == i) {
                            pp.Writer.RenderBeginTag(HtmlTextWriterTag.Strong);
                            pp.Writer.Write(pp.PageIndex.ToString());
                            pp.Writer.RenderEndTag();
                        }
                        else {
                            pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                                ? Helper.GetPostBack(i, pp.PageNumIndex, pp.PageObject, pp.ControlObject)
                                : string.Format(pp.Url, i, pp.PageNumIndex));
                            pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                            pp.Writer.Write(i.ToString());
                            pp.Writer.RenderEndTag();
                        }
                    }
                }
            }
            // 下翻页
            if (pp.PageNumIndex >= 1 && pp.PageNumIndex < pp.PageNumCount) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageNumIndex * pp.PageNumSize + 1, pp.PageNumIndex + 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageNumIndex * pp.PageNumSize + 1, pp.PageNumIndex + 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("&rsaquo;&rsaquo;");
                pp.Writer.RenderEndTag();

                if (pp.PageNumIndex != pp.PageNumCount) {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(pp.PageCount, pp.PageNumCount, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, pp.PageCount, pp.PageNumCount));
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write("&rsaquo;|");
                    pp.Writer.RenderEndTag();
                }
            }
            if (pp.PageCount > 1) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Size, "3");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Style, "height:14px;");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Id, string.Format("{0}_PageIndex", pp.ControlObject.UniqueID));
                pp.Writer.AddAttribute("onkeydown", pp.LinkType == LinkTypeEnums.Postback
                    ? string.Format("return doPage('{0}',{1},null);", pp.ControlObject.UniqueID, pp.PageNumSize)
                    : string.Format("return doPage('{0}',{1},'{2}');", pp.ControlObject.UniqueID, pp.PageNumSize, pp.Url));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.Input);
                pp.Writer.RenderEndTag();
            }

            pp.Writer.RenderEndTag();
        }
        /// <summary>
        /// 分页样式 4
        /// </summary>
        /// <param name="pp">分页参数</param>
        internal static void OutputPageFour(PageParameters pp) {
            // 总记录数/总页数/每页显示记录数/当前页码
            pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "zlpages");
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.Div);
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
            pp.Writer.Write(string.Format("共有{4}{0}{4}条记录{4}共{4}{1}{4}页{4}每页{4}{2}{4}条{4}当前第{4}{3}{4}页{4}",
                pp.RecordCount, pp.PageCount, pp.PageSize, pp.PageIndex, "&nbsp"));
            pp.Writer.RenderEndTag();
            // 第一页/上一页
            if (pp.PageIndex > 1) {
                if (pp.PageIndex > pp.PageIndexPreNum + 1 && pp.PageNumSize < pp.PageCount) {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(1, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, 1));
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write("1...");
                    pp.Writer.RenderEndTag();
                }
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageIndex - 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageIndex - 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("&lsaquo;&lsaquo;");
                pp.Writer.RenderEndTag();
            }

            int minValue, maxValue;
            // 循环链接
            if (pp.PageNumSize > pp.PageCount) {
                minValue = 1;
                maxValue = pp.PageCount;
            }
            else {
                if (pp.PageIndex > pp.PageIndexPreNum) {
                    minValue = pp.PageIndex - pp.PageIndexPreNum;
                    maxValue = pp.PageNumSize + minValue - 1;
                }
                else {
                    minValue = 1;
                    maxValue = pp.PageNumSize;
                }
                if (maxValue > pp.PageCount) {
                    minValue = pp.PageCount - pp.PageNumSize + 1;
                    maxValue = pp.PageCount;
                }
            }

            for (int i = minValue; i <= maxValue; i++) {
                if (i == pp.PageIndex) {
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.Strong);
                    pp.Writer.Write(i.ToString());
                    pp.Writer.RenderEndTag();
                }
                else {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(i, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, i));
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write(i.ToString());
                    pp.Writer.RenderEndTag();
                }
            }
            // 下一页/最后一页
            if (pp.PageIndex < pp.PageCount) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageIndex + 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageIndex + 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("&rsaquo;&rsaquo;");
                pp.Writer.RenderEndTag();
                if (pp.PageIndex + pp.PageNumSize - pp.PageIndexPreNum <= pp.PageCount) {
                    pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                        ? Helper.GetPostBack(pp.PageCount, pp.PageObject, pp.ControlObject)
                        : string.Format(pp.Url, pp.PageCount));
                    pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                    pp.Writer.Write(string.Format("...{0}", pp.PageCount));
                    pp.Writer.RenderEndTag();
                }
            }
            // textbox 跳转
            if (pp.PageCount > 1) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Size, "3");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Style, "height:14px;");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Id, string.Format("{0}_PageIndex", pp.ControlObject.UniqueID));
                pp.Writer.AddAttribute("onkeydown", pp.LinkType == LinkTypeEnums.Postback
                    ? string.Format("return doPage('{0}',{1},null);", pp.ControlObject.UniqueID, 0)
                    : string.Format("return doPage('{0}',{1},'{2}');", pp.ControlObject.UniqueID, -1, pp.Url));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.Input);
                pp.Writer.RenderEndTag();
            }

            pp.Writer.RenderEndTag();
        }
        /// <summary>
        /// 分页样式 5
        /// </summary>
        /// <param name="pp">分页参数</param>
        internal static void OutputPageFive(PageParameters pp) {
            // 总记录数/总页数/每页显示记录数/当前页码
            pp.Writer.AddAttribute(HtmlTextWriterAttribute.Class, "zlpages");
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.Div);
            pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
            pp.Writer.Write(string.Format("共有{4}{0}{4}条记录{4}共{4}{1}{4}页{4}每页{4}{2}{4}条{4}当前第{4}{3}{4}页{4}",
                pp.RecordCount, pp.PageCount, pp.PageSize, pp.PageIndex, "&nbsp"));
            pp.Writer.RenderEndTag();
            // 第一页/上一页
            if (pp.PageIndex > 1) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("首页");
                pp.Writer.RenderEndTag();
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageIndex - 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageIndex - 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("上一页");
                pp.Writer.RenderEndTag();
            }
            // 下一页/最后一页
            if (pp.PageIndex < pp.PageCount) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageIndex + 1, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageIndex + 1));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("下一页");
                pp.Writer.RenderEndTag();
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Href, pp.LinkType == LinkTypeEnums.Postback
                    ? Helper.GetPostBack(pp.PageCount, pp.PageObject, pp.ControlObject)
                    : string.Format(pp.Url, pp.PageCount));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.A);
                pp.Writer.Write("尾页");
                pp.Writer.RenderEndTag();
            }
            // textbox 跳转
            if (pp.PageCount > 1) {
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Size, "3");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Style, "height:14px;");
                pp.Writer.AddAttribute(HtmlTextWriterAttribute.Id, string.Format("{0}_PageIndex", pp.ControlObject.UniqueID));
                pp.Writer.AddAttribute("onkeydown", pp.LinkType == LinkTypeEnums.Postback
                    ? string.Format("return doPage('{0}',{1},null);", pp.ControlObject.UniqueID, 0)
                    : string.Format("return doPage('{0}',{1},'{2}');", pp.ControlObject.UniqueID, -1, pp.Url));
                pp.Writer.RenderBeginTag(HtmlTextWriterTag.Input);
                pp.Writer.RenderEndTag();
            }

            pp.Writer.RenderEndTag();
        }

        #endregion
    }
    /// <summary>
    /// 分页链接的类型
    /// </summary>
    public enum LinkTypeEnums {
        /// <summary>
        /// Url
        /// </summary>
        Url,
        /// <summary>
        /// Mvc
        /// </summary>
        Mvc,
        /// <summary>
        /// Postback
        /// </summary>
        Postback
    }
    /// <summary>
    /// 分页类型
    /// </summary>
    public enum PageStyleEnums {
        /// <summary>
        /// 分页样式一
        /// </summary>
        One,
        /// <summary>
        /// 分页样式二
        /// </summary>
        Two,
        /// <summary>
        /// 分页样式三
        /// </summary>
        Three,
        /// <summary>
        /// 分页样式四
        /// </summary>
        Four,
        /// <summary>
        /// 分页样式五
        /// </summary>
        Five
    }
    internal struct PageParameters {
        internal HtmlTextWriter Writer;
        internal Page PageObject;
        internal Control ControlObject;
        internal string Url;
        internal LinkTypeEnums LinkType;
        internal int RecordCount;
        internal int PageSize;
        internal int PageNumSize;
        internal int PageCount;
        internal int PageNumCount;
        internal int PageIndex;
        internal int PageNumIndex;
        internal int PageIndexPreNum;
    }
}